package com.jpxx.netty.chaibao;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

public class Client {

	static final String HOST = System.getProperty("host", "127.0.0.1");
	static final int PORT = Integer
			.parseInt(System.getProperty("port", "8765"));
	static final int SIZE = Integer.parseInt(System.getProperty("size", "256"));

	public static void main(String[] args) throws Exception {

		// Configure the client.
		EventLoopGroup group = new NioEventLoopGroup();
		try {
			Bootstrap b = new Bootstrap();
			b.group(group).channel(NioSocketChannel.class)
					// 指定客户端模式
					.option(ChannelOption.TCP_NODELAY, true)
					.handler(new ChannelInitializer<SocketChannel>() {
						@Override
						public void initChannel(SocketChannel sc) throws Exception {
							// 设置分隔符
							ByteBuf buf = Unpooled.copiedBuffer("$_".getBytes());// 通过工具类转成buf类型
							// 设置字符串形式的解码 此处1024指的是分隔符的大小范围
							sc.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));
							// 设置字符串形式的解码
							sc.pipeline().addLast(new StringDecoder());
							//加业务
							sc.pipeline().addLast(new ClientHandler());
						}
					});

			ChannelFuture cf1 = b.connect(HOST, PORT).sync();// 连接服务端的地方
			// 连接成功
			System.out.println(HOST + PORT + "连接上~~~~~~");
			cf1.channel().writeAndFlush(Unpooled.copiedBuffer("aa$_".getBytes()));
			cf1.channel().writeAndFlush(Unpooled.copiedBuffer("bbbb$_".getBytes()));
			
			cf1.channel().closeFuture().sync();
		} finally {
			group.shutdownGracefully();
		}
	}

}